package cn.xx.basic.service.impl;

import cn.xx.basic.constant.VerifactionCodeConstant;
import cn.xx.basic.exception.CustomException;
import cn.xx.basic.service.IVerfactionService;
import cn.xx.basic.util.SendMsgUtil;
import cn.xx.basic.util.StrUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

@Service
public class VerfactionServiceImpl implements IVerfactionService {

    @Autowired
    private RedisTemplate redisTemplate;

    @Override
    public void sendVerifactionCode(String phone) throws CustomException {
        // 生成验证码
        String code = StrUtils.getRandomString(4);
        // 获取redis中的验证码
        String codeValue = (String)redisTemplate.opsForValue().get(phone + ":" + VerifactionCodeConstant.REG_CODE);
        // 如果获取到了
        if (codeValue != null) {
            // 将后一半的存放时间取出
            Long beginTime = Long.valueOf(codeValue.split(":")[1]);
            // 用当前时间-存放时间 < 60秒
            if (System.currentTimeMillis() - beginTime < 60*1000) {
                // 抛出异常
                throw new CustomException("1分钟还没到哦，等一下吧");
            } else {
                // 进入else代表>60秒 < 300 秒  ,   取前一半验证码且保持不变
                code = codeValue.split(":")[0];
            }
        }

        // 存放验证码，key用phone+常量区分，防止被覆盖，value用验证码+当前时间 用于判断1分钟内不可以重发
        redisTemplate.opsForValue().set(phone + ":" + VerifactionCodeConstant.REG_CODE,code + ":" + System.currentTimeMillis(),5, TimeUnit.MINUTES);
        // 内容随便写，不可以写暴力内容
        String content = "欢迎注册会员,本次验证码为：" + code;

        System.err.println(content);
       /* // 调用信息发送工具
        SendMsgUtil.sendMsg(phone, content);*/
    }

    @Override
    public void sendBinderMobileCode(String phone) throws CustomException {
        // 生成验证码
        String code = StrUtils.getRandomString(4);
        // 获取redis中的验证码
        String codeValue = (String)redisTemplate.opsForValue().get(phone + ":" + VerifactionCodeConstant.USER_CODE);
        // 如果获取到了
        if (codeValue != null) {
            // 将后一半的存放时间取出
            Long beginTime = Long.valueOf(codeValue.split(":")[1]);
            // 用当前时间-存放时间 < 60秒
            if (System.currentTimeMillis() - beginTime < 60*1000) {
                // 抛出异常
                throw new CustomException("1分钟还没到哦，等一下吧");
            } else {
                // 进入else代表>60秒 < 300 秒  ,   取前一半验证码且保持不变
                code = codeValue.split(":")[0];
            }
        }

        // 存放验证码，key用phone+常量区分，防止被覆盖，value用验证码+当前时间 用于判断1分钟内不可以重发
        redisTemplate.opsForValue().set(phone + ":" + VerifactionCodeConstant.USER_CODE,code + ":" + System.currentTimeMillis(),5, TimeUnit.MINUTES);
        // 内容随便写，不可以写暴力内容
        String content = "欢迎注册会员,本次验证码为：" + code;

        System.err.println(content);
       /* // 调用信息发送工具
        SendMsgUtil.sendMsg(phone, content);*/
    }
}
